package com.常用类.Arrays数组类;//482

import java.util.Comparator;
@SuppressWarnings("all")
public class 定制冒泡排序 {
    public static void main(String[] args) {
        int arr1[] = {1,8,-7,-95,-4,0,8};
        MySort1(arr1);  //这里是正常的冒泡排序；



        int arr2[] = {1,8,-7,-95,-4,0,8};
        MySort2(arr2, new Comparator(){
            //创建匿名内部类实现Comparator接口并创建对象传入2方法；根据动态绑定又回到匿名内部类的方法；
            @Override
            public int compare(Object o1, Object o2) {
                int i1 = (Integer)o1;
                int i2 = (Integer)o2;
                return i1 - i2;
                //if (c.compare(arr[j] ,arr[j+1]) > 0) 判断条件
                // 如果前面的大于后面的返回大于零的数，就执行交换，导致升序；反之不交换
                //如果把返回改成 i2-i1 排序顺序就会跌倒，实现了定制排序；
            }
        });

    }


    /**通过匿名内部类实现Comparator接口惊醒进行比较，用返回的返回值来决定是否是升还是降序*/
    public static void MySort2(int[] arr , Comparator c) {//，传入匿名内部类
        int temp;
        for (int i = 0; i < arr.length -1; i++) {
            for (int j = 0; j < arr.length -1 - i; j++) {
                if (c.compare(arr[j] ,arr[j+1]) > 0) {//根据动态绑定又回到匿名内部类的方法进行比较；i1和i2的插值决定是否执行if语句；
                    //这里会调用对象的比较方法，传入arr[j] arr[j+1];如果
                     temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }


    public static void MySort1(int[] arr) {
        int temp;
        for (int i = 0; i < arr.length -1; i++) {
            for (int j = 0; j < arr.length -1 - i; j++) {
                if (arr[j] > arr[j+1]) {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
}
